﻿using System;

namespace Simp.Model.CoreExpressions
{
	/// <summary>Represents a numeric function, something representing a number.</summary>
	public interface INumericExpression
	{
		/// <summary>Returns an integer representation.  If the numeric isn't an integer, it returns <c>null</c>.</summary>
		/// <returns></returns>
		IntegerExpression GetInteger();

		/// <summary>Returns a rational representation.  If the numeric isn't a rational, it returns <c>null</c>.</summary>
		/// <returns></returns>
		RationalExpression GetRational();

		/// <summary>Returns a real representation.  If the numeric isn't an real, it returns <c>null</c>.</summary>
		/// <param name="force">Can force an integer or a rational into a real by approximation.</param>
		/// <returns></returns>
		RealExpression GetReal(bool force);
	}
}